package easy;

public class hua_binTohex {
    public static void main(String[] args) {   //测试的代码
        String s= "11111111111111111111111111111111";
        System.out.println(binaryToDecimal(s));
    }

    // 待实现函数，在此函数中填入答题代码
    // 正数的二进制码和负数的补码转换为十进制
    private static int binaryToDecimal(String binaryString) {   //估计符号位的转换
        if(binaryString.length()<32 || binaryString.charAt(0)=='0'){   //如果不是32位，或者32位是0，意味着是正数
            return binToDec(binaryString);
        }
        // 负数的处理
        String str=binaryString.substring(1);
        char[] charstr = str.toCharArray();
        for(int i=0;i<charstr.length;i++){
            if(charstr[i]=='0'){
                charstr[i]='1';
            }else{
                charstr[i]='0';
            }
        }
        String str2 = new String(charstr);  // 需要特别注意，把char[]转换为String需要用String的构造函数，不能用 char.toString()!!!
        return -(binToDec(str2)+1);
    }
    private static int binToDec(String binaryString) {   // 这是一个将二进制转为十进制的函数（不会顾及符号位）
        int decimal = 0;
        int length = binaryString.length();
        // 从右向左遍历二进制字符串
        for (int i = 0; i < length; i++) {
            char digit = binaryString.charAt(length - i - 1); // 从最低位开始获取每一位数字字符

            // 将字符转换为对应的数字
            int digitValue = Character.getNumericValue(digit);

            // 计算当前位的十进制值并累加到结果中
            decimal += digitValue * Math.pow(2, i);
        }
        return decimal;
    }

}
